﻿// 3652. 最大连续子序列.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>


using namespace std;
/*
https://www.acwing.com/problem/content/3655/

给定 K个整数的序列 {N0,N1,…,NK−1}
，其任意连续子序列可表示为 {Ni,Ni+1,…,Nj}
，其中 0≤i≤j<K。

最大连续子序列是所有连续子序列中元素和最大的一个，例如给定序列 {−2,11,−4,13,−5,−2}
，其最大连续子序列为 {11,−4,13} ，最大和为 20。

编写程序得到其中最大子序列的和并输出该子序列的第一个和最后一个元素的下标。

输入格式
输入包含多组测试数据。

每组数据占 2行，第 1行给出正整数 K。

第 2 行给出 K个整数 N1,…,NK。

输出格式
每组数据输出一行结果，包含最大子序列的和以及子序列的第一个下标 i和最后一个元素的下标 j。

所有元素下标为 0∼K−1。

如果最大子序列不唯一，则选择 i最小的那个子序列，如果仍不唯一，则选择 i
 最小的子序列中 j 最小的那个子序列。

若所有 K个元素都是负数，则定义其最大和为 0
，输出 0 0 0。

数据范围
1≤K≤105
,
−10000≤Ni≤10000
,
输入最多包含 10组数据。

输入样例：
8
6 -2 11 -4 13 -5 -2 10
5
10 -10 10 -10 10
8
-1 -5 -2 3 -1 0 -2 0
4
-1 -2 -4 -3
输出样例：
27 0 7
10 0 0
3 3 3
0 0 0
*/


const int N = 100010;
int a[N], pre[N];
int n;


void solve() {
	int l = 0; int r = 1;
	int currmin = 0;
	int res = -10010; int ansl = -1; int ansr = -1;
	while (r <= n) {
		if (pre[r] - pre[l] > res) {
			res = pre[r] - pre[l];
			ansl = l; ansr = r;
		}
		if (currmin > pre[r]) {
			currmin = pre[r];
			l = r;
		}
		r++;
	}
	if (res < 0) {
		cout << "0 0 0" << endl;
	}
	else {
		cout << res << " " << ansl << " " << ansr - 1 << endl;
	}
}

int main()
{
	while (cin >> n) {
		for (int i = 1; i <= n; i++) {
			cin >> a[i];
			pre[i] = pre[i - 1] + a[i];
		}
		solve();
	}

	return 0;
}

 